//
//  LWSportMaoViewController.m
//  LWmyTracking
//
//  Created by mac on 17/1/13.
//  Copyright © 2017年 ITLIN. All rights reserved.
//

#import "LWSportMapViewController.h"
#import <MAMapKit/MAMapKit.h>
//MARK: - 用来展示地图的控制器.
static NSString *annotationId = @"annotationId";
@interface LWSportMapViewController ()<MAMapViewDelegate>
//记录用户的起点位置---> 然后在上面插一个自定义的大头针
@property(strong,nonatomic)CLLocation *startLocation;

@end
@implementation LWSportMapViewController
- (void)viewDidLoad {
    
    [super viewDidLoad];
    
    [self setupMapView];
    
}
- (void)setupMapView
{
    MAMapView *mapView = [[MAMapView alloc]initWithFrame:self.view.bounds];//全屏地图
    //隐藏比例尺
    mapView.showsScale = NO;
    //缩放级别--->可能会在低版本的地图上失效--> 比如 4.1.0上就不起作用
    mapView.zoomLevel = 14;
    //是否显示罗盘
    mapView.showsCompass = YES;
    //是否显示实时交通
//    mapView.showTraffic = YES;
    //是否相机旋转(只有3D地图才有)
    mapView.rotateCameraEnabled = NO;
    //显示用户的位置
    mapView.showsUserLocation = YES;
    
    //设置用户的跟踪模式
    /*
    MAUserTrackingModeNone              = 0,    // 不追踪用户的location更新
    MAUserTrackingModeFollow            = 1,    // 追踪用户的location更新
    MAUserTrackingModeFollowWithHeading = 2     // 追踪用户的location与heading更新-->这种是带方向的那种箭头
     */
    mapView.userTrackingMode = MAUserTrackingModeFollow;
    //不允许系统自动暂停后台位置更新
    mapView.pausesLocationUpdatesAutomatically = NO;
    //设置地图的代理
    mapView.delegate = self;
    
    //添加地图到view上
    [self.view addSubview:mapView];
}

/**
 * @brief 位置或者设备方向更新后，会调用此函数
 * @param mapView 地图View
 * @param userLocation 用户定位信息(包括位置与设备方向等数据)
 * @param updatingLocation 标示是否是location数据更新, YES:location数据更新 NO:heading数据更新
 大概 1秒钟调用一次 ---> "位置更新"
 
 */

- (void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation updatingLocation:(BOOL)updatingLocation
{
//    updatingLocation---->用来判断用户的定位信息有没有发生改变
    //如果用户位置没有更新(原地不动)->就不要进一步操作
    if(!updatingLocation)
    {
        return;
    }
    
#warning ----> 这里的大头针其实就只有2个--->一个是蓝色的光圈,一个是我们下面写的自己定义的和运动类型相关的大头针
    if(self.startLocation == nil)
    {//如果用户没有起点位置,先把第一个位置给用户--->作为起点位置
        self.startLocation = userLocation.location;
        //创建一个自定义的大头针 -- >MAPointAnnotation 是一个点标注数组
        MAPointAnnotation *startPoint = [[MAPointAnnotation alloc]init];
        //设置大头针的经纬度
        startPoint.coordinate = self.startLocation.coordinate;
        //记得添加到地图上
        [mapView addAnnotation:startPoint];
    }
//    NSLog(@"%@",userLocation.location);

    
    //MARK: - 在这个一直更新的方法里面 加入一小段一小段的线.
    
    MAPolyline *polyLine = [self.sportTracking appendPolyLineWithLocation:userLocation.location]; //这样用到了多态--> 父类指针指向子类对象
    
    [mapView addOverlay:polyLine];
    
}



#pragma mark - 自定义大头针的方法-->和cell 一样,先从mapView的缓存池里面找
//viewForAnnotation--> 自定义设置大头针的方法 -->annotation有注释的意思
- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation
{
    NSLog(@"%@",annotation);//-->先打印出来看看
    
    if([annotation isKindOfClass:[MAUserLocation class]])
    {//如果是用户那种蓝色的大头针--> 就让系统自己来管理-->蓝色圆圈的样式
        return nil;
    }
    //先去缓存池中找
    MAAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:annotationId];
    if(annotationView == nil)
    { //如果缓存池里面找不到--再去创建
     annotationView = [[MAAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:annotationId];
    }
    
    //从模型里面拿 不同运动类型的图片作为起点
    annotationView.image = self.sportTracking.sportTypeImg;
    // 图片会挡住蓝色光圈---> 我们需要移动一下 View的位置 --向上一点就行
    annotationView.centerOffset = CGPointMake(0, - self.sportTracking.sportTypeImg.size.height * 0.5);
    
    annotationView.canShowCallout= YES;       //设置气泡可以弹出，默认为NO
    annotationView.draggable = YES;        //设置标注可以拖动，默认为NO
    return annotationView;
}




#pragma mark - 单机地图的方法->用来测试一些东西的

- (void)mapView:(MAMapView *)mapView didSingleTappedAtCoordinate:(CLLocationCoordinate2D)coordinate
{
    //销毁控制器
    [self dismissViewControllerAnimated:YES completion:nil];
//    NSLog(@"ddd");
    
    //CLLoacationCoordinate2D 是一个结构体  --> 参数里面加了CLLocationCoordinate2D * -->这个* 号--->指的是这里参数需要传入一个结构体数组
//    MAPolyline *polyLine = [MAPolyline polylineWithCoordinates:(CLLocationCoordinate2D *) count:(NSUInteger)];
    
//    CLLocationCoordinate2D coords[2];
//    coords[0] = self.startLocation.coordinate;
//    coords[1] = coordinate;
    /**
     *  此类用于定义一个由多个点相连的多段线，点与点之间尾部相连但第一点与最后一个点不相连, 通常MAPolyline是MAPolylineView的model
     */
//    MAPolyline *polyLine = [MAPolyline polylineWithCoordinates:coords count:2];
//    
//    //然后把这个 添加覆盖物到 地图上
//    [mapView addOverlay:polyLine];
}


#pragma mark - 地图覆盖物的渲染---> 这个方法不写的话,线是看不见的
- (MAOverlayRenderer *)mapView:(MAMapView *)mapView rendererForOverlay:(id<MAOverlay>)overlay
{
//    MAOverlayRenderer--->只是覆盖物渲染对象的基类
    
    //创建渲染对象 此类用于绘制MAPolyline,可以通过MAOverlayPathRenderer修改其fill和stroke attributes
    MAPolylineRenderer *renderer = [[MAPolylineRenderer alloc]initWithOverlay:overlay];
    
    renderer.strokeColor = [UIColor greenColor];
    
    renderer.lineWidth = 5;//-->不设置线宽的话是看不见线的-->因为默认线宽是0
    
    return renderer;
}

@end
